package com.it;

import java.util.concurrent.*;
import java.util.stream.IntStream;

public class VirtualThreadExample {
    public static void main(String[] args) {
        // 创建一个虚拟线程执行器，它会为每个任务创建一个虚拟线程
        var executor = Executors.newVirtualThreadPerTaskExecutor();

        // 记录开始时间
        long startTime = System.currentTimeMillis();
        
        // 并行流创建10000个任务
        IntStream.range(0, 10000).forEach(i -> {
            executor.submit(() -> {
                try {
                    // 模拟任务执行需要0.5秒
                    Thread.sleep(500);
                    System.out.println("Task " + i + " completed.");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        });

        // 关闭执行器并等待所有任务完成
        executor.shutdown();
        try {
            while (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
                // 等待所有任务完成，或者超时
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 记录结束时间
        long endTime = System.currentTimeMillis();
        // 计算并打印总耗时
        long duration = endTime - startTime;
        System.out.println("All tasks completed in " + duration + " milliseconds.");
    }
}